home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / mach / ds3100.md / machMon.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  9KB  |  267 lines

  1. /*
  2.  * machMon.h --
  3.  *
  4.  *    Structures, constants and defines for access to the pmax prom.
  5.  *
  6.  *    Copyright (C) 1989 Digital Equipment Corporation.
  7.  *    Permission to use, copy, modify, and distribute this software and
  8.  *    its documentation for any purpose and without fee is hereby granted,
  9.  *    provided that the above copyright notice appears in all copies.
  10.  *    Digital Equipment Corporation makes no representations about the
  11.  *    suitability of this software for any purpose.  It is provided "as is"
  12.  *    without express or implied warranty.
  13.  *
  14.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/mach/ds3100.md/machMon.h,v 9.6 90/10/09 11:47:08 jhh Exp $ SPRITE (Berkeley)
  15.  */
  16.  
  17. #ifndef _MACHMON
  18. #define _MACHMON
  19.  
  20. /*
  21.  * The prom routines use the following structure to hold strings.
  22.  */
  23. typedef struct {
  24.     char    *argPtr[16];    /* Pointers to the strings. */
  25.     char    strings[256];        /* Buffer for the strings. */
  26.     char    *end;        /* Pointer to end of used buf. */
  27.     int     num;        /* Number of strings used. */
  28. } MachStringTable;
  29.  
  30. MachStringTable    MachMonBootParam;    /* Boot command line. */
  31.  
  32. /*
  33.  * The prom has a jump table at the beginning of it to get to its
  34.  * functions.
  35.  */
  36. #define MACH_MON_JUMP_TABLE_ADDR    0xBFC00000
  37.  
  38. /*
  39.  * Default reboot string.
  40.  */
  41. #define DEFAULT_REBOOT    "tftp()ds3100"
  42.  
  43. /*
  44.  * The jump table.
  45.  */
  46. typedef struct Mach_MonFuncs {
  47.     int        (*reset)();
  48.     int        (*exec)();
  49.     int        (*restart)();
  50.     int        (*reinit)();
  51.     int        (*reboot)();
  52.     int        (*autoboot)();
  53.     int        (*open)();
  54.     int        (*read)();
  55.     int        (*write)();
  56.     int        (*ioctl)();
  57.     int        (*close)();
  58.     int        (*lseek)();
  59.     int        (*mgetchar)();
  60.     int        (*mputchar)();
  61.     int        (*showchar)();
  62.     int        (*gets)();
  63.     int        (*puts)();
  64.     int        (*printf)();
  65.     int        (*mem1)();
  66.     int        (*mem2)();
  67.     int        (*save_regs)();
  68.     int        (*load_regs)();
  69.     int        (*jump_s8)();
  70.     char *    (*getenv2)();
  71.     int        (*setenv2)();
  72.     int        (*atonum)();
  73.     int        (*strcmp)();
  74.     int        (*strlen)();
  75.     char *    (*strcpy)();
  76.     char *    (*strcat)();
  77.     int        (*get_cmd)();
  78.     int        (*get_nums)();
  79.     int     (*argparse)();
  80.     int        (*help)();
  81.     int        (*dump)();
  82.     int        (*setenv)();
  83.     int        (*unsetenv)();
  84.     int        (*printenv)();
  85.     int        (*jump2_s8)();
  86.     int        (*enable)();
  87.     int        (*disable)();
  88.     int        (*zero_buf)();
  89. } Mach_MonFuncs;
  90.  
  91. /*
  92.  * Each entry in the jump table is 8 bytes - 4 for the jump and 4 for a nop.
  93.  */
  94. #define MACH_MON_FUNC_ADDR(funcNum)    (MACH_MON_JUMP_TABLE_ADDR+((funcNum)*8))
  95.  
  96. /*
  97.  * The functions:
  98.  *
  99.  *    MACH_MON_RESET        Run diags, check bootmode, reinit.
  100.  *    MACH_MON_EXEC        Load new program image.
  101.  *    MACH_MON_RESTART    Re-enter monitor command loop.
  102.  *    MACH_MON_REINIT        Re-init monitor, then cmd loop.
  103.  *    MACH_MON_REBOOT        Check bootmode, no config.
  104.  *    MACH_MON_AUTOBOOT    Autoboot the system.
  105.  *
  106.  * The following routines access PROM saio routines and may be used by
  107.  * standalone programs that would like to use PROM I/O:
  108.  *
  109.  *    MACH_MON_OPEN        Open a file.
  110.  *    MACH_MON_READ        Read from a file.
  111.  *    MACH_MON_WRITE        Write to a file.
  112.  *    MACH_MON_IOCTL        Iocontrol on a file.
  113.  *    MACH_MON_CLOSE        Close a file.
  114.  *    MACH_MON_LSEEK        Seek on a file.
  115.  *    MACH_MON_GETCHAR    Get character from console.
  116.  *    MACH_MON_PUTCHAR    Put character on console.
  117.  *    MACH_MON_SHOWCHAR    Show a char visibly.
  118.  *    MACH_MON_GETS        gets with editing.
  119.  *    MACH_MON_PUTS        Put string to console.
  120.  *    MACH_MON_PRINTF        Kernel style printf to console.
  121.  *
  122.  * The following are other prom routines:
  123.  *    MACH_MON_MEM1        Do something in memory.
  124.  *    MACH_MON_MEM2        Do something else in memory.
  125.  *    MACH_MON_SAVEREGS    Save registers in a buffer.
  126.  *    MACH_MON_LOADREGS    Get register back from buffer.
  127.  *    MACH_MON_JUMPS8        Jump to address in s8.
  128.  *    MACH_MON_GETENV2    Gets a string from system environment.
  129.  *    MACH_MON_SETENV2    Sets a string in system environment.
  130.  *    MACH_MON_ATONUM        Converts ascii string to number.
  131.  *    MACH_MON_STRCMP        Compares strings (strcmp).
  132.  *    MACH_MON_STRLEN        Length of string (strlen).
  133.  *    MACH_MON_STRCPY        Copies string (strcpy).
  134.  *    MACH_MON_STRCAT        Appends string (strcat).
  135.  *    MACH_MON_GETCMD        Gets a command.
  136.  *    MACH_MON_GETNUMS    Gets numbers.
  137.  *    MACH_MON_ARGPARSE    Parses string to argc,argv.
  138.  *    MACH_MON_HELP        Help on prom commands.
  139.  *    MACH_MON_DUMP        Dumps memory.
  140.  *    MACH_MON_SETENV        Sets a string in system environment.
  141.  *    MACH_MON_UNSETENV    Unsets a string in system environment
  142.  *    MACH_MON_PRINTENV    Prints system environment
  143.  *    MACH_MON_JUMP2S8    Jumps to s8
  144.  *    MACH_MON_ENABLE        Performs prom enable command.
  145.  *    MACH_MON_DISABLE    Performs prom disable command.
  146.  *    MACH_MON_ZEROB        Zeros a system buffer.
  147.  */
  148. #define MACH_MON_RESET        MACH_MON_FUNC_ADDR(0)
  149. #define MACH_MON_EXEC        MACH_MON_FUNC_ADDR(1)
  150. #define MACH_MON_RESTART    MACH_MON_FUNC_ADDR(2)
  151. #define MACH_MON_REINIT        MACH_MON_FUNC_ADDR(3)
  152. #define MACH_MON_REBOOT        MACH_MON_FUNC_ADDR(4)
  153. #define MACH_MON_AUTOBOOT    MACH_MON_FUNC_ADDR(5)
  154. #define MACH_MON_OPEN        MACH_MON_FUNC_ADDR(6)
  155. #define MACH_MON_READ        MACH_MON_FUNC_ADDR(7)
  156. #define MACH_MON_WRITE        MACH_MON_FUNC_ADDR(8)
  157. #define MACH_MON_IOCTL        MACH_MON_FUNC_ADDR(9)
  158. #define MACH_MON_CLOSE        MACH_MON_FUNC_ADDR(10)
  159. #define MACH_MON_LSEEK        MACH_MON_FUNC_ADDR(11)
  160. #define MACH_MON_GETCHAR    MACH_MON_FUNC_ADDR(12)
  161. #define MACH_MON_PUTCHAR    MACH_MON_FUNC_ADDR(13)
  162. #define MACH_MON_SHOWCHAR    MACH_MON_FUNC_ADDR(14)
  163. #define MACH_MON_GETS        MACH_MON_FUNC_ADDR(15)
  164. #define MACH_MON_PUTS        MACH_MON_FUNC_ADDR(16)
  165. #define MACH_MON_PRINTF        MACH_MON_FUNC_ADDR(17)
  166. #define MACH_MON_MEM1        MACH_MON_FUNC_ADDR(28)
  167. #define MACH_MON_MEM2        MACH_MON_FUNC_ADDR(29)
  168. #define MACH_MON_SAVEREGS    MACH_MON_FUNC_ADDR(30)
  169. #define MACH_MON_LOADREGS    MACH_MON_FUNC_ADDR(31)
  170. #define MACH_MON_JUMPS8        MACH_MON_FUNC_ADDR(32)
  171. #define MACH_MON_GETENV2    MACH_MON_FUNC_ADDR(33)
  172. #define MACH_MON_SETENV2    MACH_MON_FUNC_ADDR(34)
  173. #define MACH_MON_ATONUM        MACH_MON_FUNC_ADDR(35)
  174. #define MACH_MON_STRCMP        MACH_MON_FUNC_ADDR(36)
  175. #define MACH_MON_STRLEN        MACH_MON_FUNC_ADDR(37)
  176. #define MACH_MON_STRCPY        MACH_MON_FUNC_ADDR(38)
  177. #define MACH_MON_STRCAT        MACH_MON_FUNC_ADDR(39)
  178. #define MACH_MON_GETCMD        MACH_MON_FUNC_ADDR(40)
  179. #define MACH_MON_GETNUMS    MACH_MON_FUNC_ADDR(41)
  180. #define MACH_MON_ARGPARSE    MACH_MON_FUNC_ADDR(42)
  181. #define MACH_MON_HELP        MACH_MON_FUNC_ADDR(43)
  182. #define MACH_MON_DUMP        MACH_MON_FUNC_ADDR(44)
  183. #define MACH_MON_SETENV        MACH_MON_FUNC_ADDR(45)
  184. #define MACH_MON_UNSETENV    MACH_MON_FUNC_ADDR(46)
  185. #define MACH_MON_PRINTENV    MACH_MON_FUNC_ADDR(47)
  186. #define MACH_MON_JUMP2S8    MACH_MON_FUNC_ADDR(48)
  187. #define MACH_MON_ENABLE        MACH_MON_FUNC_ADDR(49)
  188. #define MACH_MON_DISABLE    MACH_MON_FUNC_ADDR(50)
  189. #define MACH_MON_ZEROB        MACH_MON_FUNC_ADDR(51)
  190.  
  191. #ifdef _MONFUNCS
  192. Mach_MonFuncs mach_MonFuncs = {
  193.     (int (*)()) MACH_MON_RESET,
  194.     (int (*)()) MACH_MON_EXEC,
  195.     (int (*)()) MACH_MON_RESTART,
  196.     (int (*)()) MACH_MON_REINIT,
  197.     (int (*)()) MACH_MON_REBOOT,
  198.     (int (*)()) MACH_MON_AUTOBOOT,
  199.     (int (*)()) MACH_MON_OPEN,
  200.     (int (*)()) MACH_MON_READ,
  201.     (int (*)()) MACH_MON_WRITE,
  202.     (int (*)()) MACH_MON_IOCTL,
  203.     (int (*)()) MACH_MON_CLOSE,
  204.     (int (*)()) MACH_MON_LSEEK,
  205.     (int (*)()) MACH_MON_GETCHAR,
  206.     (int (*)()) MACH_MON_PUTCHAR,
  207.     (int (*)()) MACH_MON_SHOWCHAR,
  208.     (int (*)()) MACH_MON_GETS,
  209.     (int (*)()) MACH_MON_PUTS,
  210.     (int (*)()) MACH_MON_PRINTF,
  211.     (int (*)()) MACH_MON_MEM1,
  212.     (int (*)()) MACH_MON_MEM2,
  213.     (int (*)()) MACH_MON_SAVEREGS,
  214.     (int (*)()) MACH_MON_LOADREGS,
  215.     (int (*)()) MACH_MON_JUMPS8,
  216.     (char *(*)()) MACH_MON_GETENV2,
  217.     (int (*)()) MACH_MON_SETENV2,
  218.     (int (*)()) MACH_MON_ATONUM,
  219.     (int (*)()) MACH_MON_STRCMP,
  220.     (int (*)()) MACH_MON_STRLEN,
  221.     (char *(*)()) MACH_MON_STRCPY,
  222.     (char *(*)()) MACH_MON_STRCAT,
  223.     (int (*)()) MACH_MON_GETCMD,
  224.     (int (*)()) MACH_MON_GETNUMS,
  225.     (int (*)()) MACH_MON_ARGPARSE,
  226.     (int (*)()) MACH_MON_HELP,
  227.     (int (*)()) MACH_MON_DUMP,
  228.     (int (*)()) MACH_MON_SETENV,
  229.     (int (*)()) MACH_MON_UNSETENV,
  230.     (int (*)()) MACH_MON_PRINTENV,
  231.     (int (*)()) MACH_MON_JUMP2S8,
  232.     (int (*)()) MACH_MON_ENABLE,
  233.     (int (*)()) MACH_MON_DISABLE,
  234.     (int (*)()) MACH_MON_ZEROB,
  235. };
  236. #else
  237. extern    Mach_MonFuncs    mach_MonFuncs;
  238. #endif
  239.  
  240. /*
  241.  * Functions and defines to access the monitor.
  242.  */
  243.  
  244. extern void Mach_MonAbort _ARGS_((void));
  245. extern int Mach_MonPutChar _ARGS_((int ch));
  246. extern void Mach_MonReboot _ARGS_((char *rebootString));
  247. #define Mach_MonMayPut Mach_MonPutChar
  248.  
  249.  
  250. #define Mach_MonGetChar            (mach_MonFuncs.mgetchar)
  251. #define Mach_MonGetNextChar        (mach_MonFuncs.mgetchar)
  252. #define Mach_MonGetLine            (mach_MonFuncs.gets)
  253. #define Mach_ArgParse(string,table)    (mach_MonFuncs.argparse)(string,table)
  254. #define Mach_MonPrintf            (mach_MonFuncs.printf)
  255. #define Mach_MonOpen(name,flags)    (mach_MonFuncs.open)(name,flags)
  256. #define Mach_MonRead(fd,buf,len)    (mach_MonFuncs.read)(fd,buf,len)
  257. #define Mach_MonClose(fd)        (mach_MonFuncs.close)(fd)
  258. #define Mach_MonLseek(fd,offset,mode)    (mach_MonFuncs.lseek)(fd,offset,mode)
  259.  
  260. /*
  261.  * The nonvolatile ram has a flag to indicate it is usable.
  262.  */
  263. #define MACH_USE_NON_VOLATILE     ((char *)0xbd0000c0)
  264. #define MACH_NON_VOLATILE_FLAG    0x02
  265.  
  266. #endif /* _MACHPROM */
  267.